import java.io.*;
import java.net.*;
import java.util.*;

public class Human extends Player //implements ActionListener
{
	private Card karty[];					//karty gracza		
	private Scanner skaner;
	private boolean exit;
	private static final int PORT = 5564;
	private static final String HOST = "localhost";
	private static Socket socket_klienta = null;
	private static ObjectInputStream ois;
    private static ObjectOutputStream oos;
	
	public Human()
	{
		karty = new Card [5];
		skaner = new Scanner(System.in);
		exit = false;
	}
	
	public static void main(String args[])
	{
		Human gracz = new Human();
		gracz.nasluchuj();
	}
	
	private void nasluchuj()
	{
		try
		{
			socket_klienta = new Socket(HOST, PORT);
			oos = new ObjectOutputStream(socket_klienta.getOutputStream());
			ois = new ObjectInputStream(socket_klienta.getInputStream());
			odbierz_karty(karty, ois);
			wyswietl_karty(karty);
			graj();
		}
		catch (UnknownHostException uhe)
		{
			System.out.println("Nieznany host!");
		}
		catch (IOException ioe)
		{
			System.out.println("Błąd wejścia/wyjścia!");
			System.exit(1);
		}
	}
	
	public void graj()
	{
		while (!exit)
		{
			pobierz_ruch();
		}
		skaner.close();
	}
	
	private void czekaj(long czas)
	{
		try
		{
			if (czas > 0)
				Thread.sleep(czas);
		}
		catch (InterruptedException ie)
		{
			System.out.println("Wystąpił błąd:\n" + ie.getMessage());
		}
	}
	
	public void pobierz_ruch()
	{
		System.out.println("\nCo chcesz wykonać: \n1 by wymienic karty\n"
							+ "2 by wyswietlic karty\n3 by sprawdzić\n"
							+ "kazda inna oprocz by poczekac\n");
			
		int liczba = 0;
		boolean popraw = false;
		
		do
		{
			try
			{
				if (skaner.hasNextInt())
					liczba = skaner.nextInt();
				popraw = false;
			}
			catch (InputMismatchException ime)
			{
				System.out.println("Podano dana nieprawidlowego typu. Prosze popraw!");
				popraw = true;
			}
		} while (popraw);
		
		if (liczba == 1)
		{		
			wyswietl_karty(karty);
			System.out.println("Podaj indeks twojej karty do podmiany, indeks "
					+ "wiekszy od ilosci twoich kart lub mniejszy od 0 konczy");
			
			liczba = skaner.nextInt();
			if (liczba > -1 && liczba < 5)
			{
				Card temp;
				zamien_karty(karty[liczba], oos, ois);//, wyjscie);
				temp = odbierz_karte(ois);
				if (temp != null)
					karty[liczba] = temp;
				wyswietl_karty(karty);
			}
		}
		else if (liczba == 2)
		{
			wyswietl_karty(karty);
			czekaj(1000);
		}
		else if (liczba == 3)
		{
			sprawdz(karty, oos);
			odbierz_komunikat(ois);
			czekaj(5000);
			System.exit(0);
		}
		else 
			czekaj(2000);
	}
}